package com.zwj.interview.哈希表;

import java.util.*;

/**
 * 给定一组单词，请将它们按照变位词分组。例如，输入一组单词["eat"，"tea"，"tan"，"ate"，"nat"，"bat"]，
 * 这组单词可以分成3组，分别是["eat"，"tea"，"ate"]、["tan"，"nat"]和["bat"]。
 * 假设单词中只包含英文小写字母。
 */
public class 找出一组字符串中的异位词 {


    /**
     * 哈希表的键是把单词字母排序得到的字符串，而值为一组变位词
     *  先针对每个字符串的字符排序 然后变成字符串
     * @param strs
     * @return
     */
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> groups = new HashMap<>();
        for (String str : strs) {
            //将每个字符串按照字符进行排序后形成一个新的字符串
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String sorted = new String(charArray);
            groups.putIfAbsent(sorted, new LinkedList<String>());
            groups.get(sorted).add(str);
        }
        return new LinkedList<>(groups.values());
    }



}
